//
//  RootViewController.swift
//  Swift新浪微博
//
//  Created by 戴鑫 on 16/8/22.
//  Copyright © 2016年 heima. All rights reserved.
//

import UIKit

// 根视图控制器 - 其他主控制器的基类
class RootViewController: UIViewController {
    
    // MARK: - 公共属性
    // 用户登录标记
    var userLogon = false
    // 表格视图
    lazy var tableView = UITableView(frame: CGRectZero, style: .Plain)
    // 下拉刷新控件
    lazy var refreshControl = UIRefreshControl()
    // 上拉刷新视图
    lazy var pullupView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
    // 访客视图 - 如果用户登录成功,就不需要创建访客视图
    // 如果使用懒加载,会在登录成功后仍然创建访客视图,造成无谓的内存开销
    // lazy var visitorView: VisitorView? = VisitorView()
    // tabBar控制器的四个子控制器的访客视图各自独立,互不干扰!
    var visitorView: VisitorView?
    
    // MARK: - 视图生命周期
    override func loadView() {
        // 用户登录显示 tableView / 否则显示访客视图
        userLogon ? setupTableView() : setupVisitorView()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        loadData()
    }
    
    // 加载数据 - 真正的数据记载,应该放在子类中实现
    func loadData() {
        
    }

}

// MARK: - 设置界面
extension RootViewController {
    
    // 设置访客视图
    private func setupVisitorView() {
        visitorView = VisitorView()
        
        view = visitorView
    }
    
    // 设置表格视图
    private func setupTableView() {
        view = tableView
        
        // 设置数据源和代理
        tableView.dataSource = self
        tableView.delegate = self
    }
    
    // 设置刷新控件
    // 需要刷新控件的子控制器单独调用 'setupRefreshControl'
    // 私有函数不能被子类'继承'
    func setupRefreshControl() {
        tableView.addSubview(refreshControl)
        // 设置刷新控件的监听方法
        refreshControl.addTarget(self, action: #selector(RootViewController.loadData), forControlEvents: .ValueChanged)
        
        // 设置上拉刷新视图
        tableView.tableFooterView = pullupView
    }
    
}

extension RootViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        // 根据数据源判断是否是最后一行
        let section = tableView.numberOfSections - 1
        let row = tableView.numberOfRowsInSection(section) - 1
        
        // 判断是否是最后一行,同时没有正在上拉刷新
        if section == indexPath.section && row == indexPath.row && !pullupView.isAnimating() {
            // 启动菊花
            pullupView.startAnimating()
            // 上拉刷新加载数据
            loadData()
        }
    }
}




